package xfuzzy.xfghl.selection;

import java.util.ArrayList;
import java.util.List;

import xfuzzy.xfghl.codification.DoubleChromosome;
import xfuzzy.xfghl.population.Population;

/**
 * Clase que realiza la seleccion de individuos para el cruce y la mutacion de forma aleatoria
 * @author Alberto David Fernandez Fernandez
 * */

public class SelectionRandom extends Selection {
	
	/**
	 * Constructor de la clase
	 * @param seed Semilla del generador de numeros aleatorios
	 * */
	
	public SelectionRandom(long seed)  {
		
		super(seed);
	}
	
	/**
	 * Metodo que selecciona dos individuos de la poblacion
	 * @param poblacion Poblacion de individuos
	 * @return Lista de individuos seleccionados
	 * */
	
	public List<DoubleChromosome> seleccionar(Population poblacion) {
		
		List<DoubleChromosome> seleccionados = new ArrayList<DoubleChromosome>();
		DoubleChromosome seleccionadoAux = null;
		int randomIndex1 = this.random.nextInt(poblacion.getPoblacionSize());
		seleccionados.add(poblacion.getIndividuo(randomIndex1));
		int randomIndex2 = this.random.nextInt(poblacion.getPoblacionSize());
		while (randomIndex1 == randomIndex2)  {
			randomIndex2 = this.random.nextInt(poblacion.getPoblacionSize());
			seleccionadoAux = poblacion.getIndividuo(randomIndex2);
		}
		seleccionados.add(seleccionadoAux);
		return seleccionados;
	}
}
